package com.baomidou.kisso.common.bcprov.asn1;

import java.io.IOException;
import java.util.Enumeration;

public class BERSet extends ASN1Set {

	/**
	 * create an empty sequence
	 */
	public BERSet() {
	}


	/**
	 * @param obj - a single object that makes up the set.
	 */
	public BERSet( ASN1Encodable obj ) {
		super(obj);
	}


	/**
	 * @param v - a vector of objects making up the set.
	 */
	public BERSet( ASN1EncodableVector v ) {
		super(v, false);
	}


	/**
	 * create a set from an array of objects.
	 */
	public BERSet( ASN1Encodable[] a ) {
		super(a, false);
	}


	int encodedLength() throws IOException {
		int length = 0;
		for ( Enumeration e = getObjects() ; e.hasMoreElements() ; ) {
			length += ((ASN1Encodable) e.nextElement()).toASN1Primitive().encodedLength();
		}

		return 2 + length + 2;
	}


	/*
	 */
	void encode( ASN1OutputStream out ) throws IOException {
		out.write(BERTags.SET | BERTags.CONSTRUCTED);
		out.write(0x80);

		Enumeration e = getObjects();
		while ( e.hasMoreElements() ) {
			out.writeObject((ASN1Encodable) e.nextElement());
		}

		out.write(0x00);
		out.write(0x00);
	}
}
